package com.sg.java;

import com.google.gson.JsonObject;
import lombok.Builder;
import lombok.Data;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.TableDescriptor;

import java.util.function.Function;
import java.util.function.Predicate;

@Data
@Builder
public class MsgFromKafkaToHBaseTransformer {

    //hbase命名空间
    private String namespace;

    //订阅主题，一个transformer对应一个topic，hbase表名取此topic，最终hbase表名为<namespace>:<topic>
    private String topic;

    //建表描述策略
    private Function<TableName, TableDescriptor> tableDescriptor;

    //数据清洗策略 T_1=源数据jo对象 true取false舍
    private Predicate<JsonObject> etl;

    //数据日期生成策略 格式:yyyyMMdd
    private Function<JsonObject, String> getDataDate;

    //hbase主键row生成器策略 T_1=<清洗过的jo数据对象> T_2=<row在jo中的属性名，建议为"row"，前提是不存在同名属性否则覆盖,row的value>
    private Function<JsonObject, Pair<String, String>> rowGenerator;

    //最终jo对象转hbase.Put对象策略，进行落库
    private Function<JsonObject, Put> handleAndMapToPut;

    @Override
    public String toString() {
        return topic;
    }

}
